package controllerInterfaces;

import viewInterfaces.IViewDBConnectionSetup;
import controller.ControllerDBConnectionSetup;
import controller.ControllerMain;

/**
 * Interface of {@link ControllerDBConnectionSetup} controller class according to Abstract Factory design pattern
 */
public interface IControllerDBConnectionSetup extends IFrameController {
	
	/**
	 * Set the MVC++ Main Class for this controller.</br>
	 * ControllerMain is manipulable through {@link IControllerMain} interface
	 * @param	controllerMain	MVC++ Main Controller
	 * @see	ControllerMain
	 * @see IControllerMain
	 */
	public void SetMainController(IControllerMain controller);
	
	/**
	 * Realizes the connection to database
	 * @param	URI		identifies to the database
	 * @param	user	database user name
	 * @param	password	user password
	 */
	public void connect(String URI, String user, String password);
	

	
	/**
	 * Get View of this controller</br>
	 * This method is only used for realize unit testing.
	 * @return IViewDBConnectionSetup
	 */
	public IViewDBConnectionSetup GetView();
	
	
	
	/**
	 * Indicate if application is running on debug mode.
	 * @return value of debug mode.
	 */
	public boolean isDebug();	
	
	
	/**
	 * Show to user the view.
	 */
	public void showView();
}
